// 二、基于以下代码完成下面的四个练习

const fp = require('lodash/fp')
const _ = require('lodash')

/**
 * 数据
 * horsepower:马力,  dollar_value:价格, in_stock: 库存
 */
 const cars = [
     { name: 'ferrari ff', horsepower: 660, dollar_value: 700000, in_stock: true },
     { name: 'spyker ci2 zagato', horsepower: 650, dollar_value: 648000, in_stock: false },
     { name: 'jaquar xkr-s', horsepower: 550, dollar_value: 132000, in_stock: false },
     { name: 'audi r8', horsepower: 525, dollar_value: 114200, in_stock: false },
     { name: 'aston martion one-77', horsepower: 750, dollar_value: 1850000, in_stock: true },
     { name: 'papani huayra', horsepower: 700, dollar_value: 1300000, in_stock: false }
 ]
/**
 * 练习1:  使用函数组合fp.flowRight()重新实现下面这个函数 (求平均值)
 * 
 *  let isLastInStock = function(cars) {
 *     //获取最后一条数据
 *     let last_car = fp.last(cars)
 *     console.log(last_car);
 *     //获取最后一条数据的 in_stock 属性值
 *     return fp.prop('in_stock', last_car)
 *   }
 */

function isLastInStock (cars) {
    return fp.flowRight(fp.prop('in_stock'),fp.last)(cars)
}
// console.log(isLastInStock(cars))  // false






/**
 * 练习2:  使用fp.flowRight(), fp.prop() 和fp.first()获取第一个car的name
 */

 function isFirstName(cars) {
     return fp.flowRight(fp.prop('name'), fp.first)(cars)
 }

//  console.log(isFirstName(cars))  //ferrari ff







 /**
  * 练习3: 使用帮助函数_average重构averageDollarValue,使用函数组合的方式实现
  * 
  */

  let _average = function(xs) {
      return fp.reduce(fp.add, 0, xs) / xs.length
  }  // <- 无须改动

//   let averageDollarValue = function(cars) {
//       let dollar_values = fp.map(function(car) {
//           return car.dollar_value
//       }, cars)
//       return _average(dollar_values)
//   }

let averageDollarValue = function(cars) {
    return _average(fp.flowRight(fp.map(car => car.dollar_value))(cars))
}
console.log(averageDollarValue(cars)) // 790700







/**
 * 练习4: 使用flowRight写一个sanitizeNames()函数,返回一个下划线链接的小写字符串,把数组中的name转成为
 * 这种形式:例如:
 * sanitizeNames(['HELLLO world']) => ['hello_world']
 * w: 查找单词字符
 * W: 查找非单词字符
 */

 let _underscore = fp.replace(/\W+/g, '_') // <-- 无须改动, 并在sanitizeNames中使用它


 let sanitizeNames = function(str) {
     //fp.toLower: 小写
    return _underscore(fp.flowRight(fp.toLower)(str))
 }
//  console.log(sanitizeNames('HELLLO world'))  //hello_world